snippet /       单行注释
	// ${0}
snippet //      多行注释
	/* ${0}*/
snippet -       分隔注释
	//----------------------------------------------------------------------${0}
# 预处理
snippet in      包含系统头文件
	#include <${1}>${0}
snippet in.     包含自定义头文件
	#include "${1}"${0}
snippet ini     包含标准输入输出库
	#include <iostream>${0}
snippet ins     包含标准输入输出头文件
	#include <stdio.h>${0}
snippet df      宏定义
	#define ${0}
snippet /if     包含了指定头文件时的处理方式
	#ifdef ${1}
	${0}
	#endif
snippet /ifn    防止头文件重复包含
	#ifndef _HEAD_${1:}_H_
	#define _HEAD_$1_H_

	${0}

	#endif
snippet /el     #else
	#else
	${0}
snippet line    改变文件行号和文件名
	#line ${1} "${0}"
# 命名空间、类
snippet u       引用
	using ${1};${0}
snippet us      引用命名空间
	using namespace ${1:std};${0}
snippet na      命名空间
	namespace ${1:na_name} {
	    ${0}
	}
snippet cl      类定义
	class ${1:cl_name} {
	    ${0}
	};
snippet cle     类继承
	class ${1:ch_name} : ${2:public} ${3:pa_name} {
	    ${0}
	};
snippet fc      构造函数
	${1:f_name}(${2})${3} {
	    ${0}
	}
snippet fd      析构函数
	~${1:f_name}() {
	    ${0}
	}
snippet fop     操作符重载函数
	${1:void} operator${2:=}(${3})${4} {
	    ${0}
	}
# 函数
snippet main    主函数
	int main(int argc, char* argv[]) {
	    ${0}

	    return 0;
	}
snippet f       函数定义
	${1:void} ${2:f_name}(${3})${4} {
	    ${0}
	}
snippet ff      函数声明
	${1:void} ${2:f_name}(${3});${0}
snippet la      匿名函数
	[${1}](${2})${3} { ${0} }
# 复合类型
snippet str     结构体定义
	struct ${1:str_name} {
	    ${0}
	};
snippet uni     共用体
	union ${1:uni_name} {
	    ${0}
	};
snippet enu     枚举定义
	enum ${1:enu_name} {
	    ${0}
	};
snippet ss      紧凑型结构体
	struct ${1:str_name} {${2} };${0}
snippet uu      紧凑型共用体
	union ${1:uni_name} {${2} };${0}
snippet ee      紧凑型枚举
	enum ${1:enu_name} {${2} };${0}
snippet tp      类型定义
	typedef ${0}
snippet tps     定义结构体类型
	typedef struct ${1:} {
	    ${0}
	} $1;
snippet tpu     定义共用体类型
	typedef union ${1:} {
	    ${0}
	} $1;
snippet tpe     定义枚举类型
	typedef enum ${1:} {
	    ${0}
	} $1;
# 流程控制
snippet if      if
	if (${1}) {
	    ${0}
	}
snippet elif    else if
	else if (${1}) {
	    ${0}
	}
snippet el      else
	else {
	    ${0}
	}
snippet fo      for
	for (${1}) {
	    ${0}
	}
snippet wh      while
	while (${1}) {
	    ${0}
	}
snippet do      do-while
	do {
	    ${0}
	} while (${1});
snippet sw      switch
	switch (${1}) {
	    ${0}
	}
snippet cs      case
	case ${1}:
	    ${0}
snippet def     default
	default:
	    ${0}
# 异常处理
snippet thr     抛出异常
	throw ${0};
snippet try     捕获异常
	try {
	    ${0}
	}
snippet cat     处理异常
	catch (${1}) {
	    ${0}
	}
snippet fin     善后处理
	finally {
	    ${0}
	}
# 类型转换
snippet sc      静态转换
	static_cast<${1}>(${0})
snippet dc      动态转换
	dynamic_cast<${1}>(${0})
snippet cc      常量转换 [去除const限制]
	const_cast<${1}*>(${0})
snippet rc      强制转换
	reinterpret_cast<${1}>(${0})
# 预定义宏
snippet _       __XXX__
	__${0}__
snippet _l      行号
	__LINE__${0}
snippet _f      文件名
	__FILE__${0}
snippet _d      日期
	__DATE__${0}
snippet _t      时间
	__TIME__${0}
snippet _ff     函数名
	__func__${0}
snippet _va     所有剩余的宏参数
	__VA_ARGS__${0}
snippet _std    标准C
	__STDC__${0}
snippet _gnu    GNUC
	__GNUC__${0}
snippet _cpp    C++
	__cplusplus${0}
# 输入输出
snippet p       输出
	printf("${1}"${2});${0}
snippet s       输入
	scanf("${1}", ${2});${0}
snippet spr
	sprintf(${1:stderr}, "${2:%s}", ${3});${0}
snippet fpr
	fprintf(${1:stderr}, "${2:%s}"${3});${0}
# 单个关键字
snippet pu      公共 [不换行]
	public${0}
snippet pu.     公共 [换行]
	public:
	    ${0}
snippet po      保护 [不换行]
	protected${0}
snippet po.     保护 [换行]
	protected:
	    ${0}
snippet pr      私有 [不换行]
	private${0}
snippet pr.     私有 [换行]
	private:
	    ${0}
snippet fr      友元
	friend ${0}
snippet vi      虚函数
	virtual ${0}
snippet te      模版
	template${0}
snippet tet     模板1
	template <typename ${1}>${0}
snippet tec     模板2
	template <class ${1}>${0}
snippet de      删除
	delete ${0}
snippet op      运算符
	operator${0}
snippet ve      向量容器
	vector<${1}>${0}
snippet li      列表
	list${0}
snippet it      迭代器
	iterator${0}
snippet cit     只读迭代器
	const_iterator${0}
snippet szt     String、各容器的大小度量单位
	size_type${0}
snippet dit     两迭代器的差值
	difference_type${0}
snippet re      返回
	return ${0};
snippet co      继续
	continue;${0}
snippet br      中断
	break;${0}
snippet go      跳转
	goto ${0}
snippet ex      退出并返回状态码
	exit(${1});${0}
snippet un      无符号
	unsigned ${0}
snippet t       this
	this${0}
snippet a       自动类型声明 [C++11特性]
	auto ${0}
snippet b       布尔类型
	bool ${0}
snippet n       分配内存
	new ${0}
snippet d       释放单一内存
	delete ${0}
snippet d.      释放多个内存
	delete[] ${0}
snippet st      静态
	static ${0}
snippet con     常量声明
	const ${0}
snippet cons    常量表达式 [C++11特性]
	constexpr ${0}
snippet reg     寄存器变量
	register ${0}
snippet vol     声明值有可能不受编译器控制
	volatile ${0}
snippet inl     内联函数
	inline ${0}
snippet res     声明指针是访问其所指对象的唯一方式
	restrict ${0}
snippet ext     声明外部变量
	extern ${0}
snippet sz      计算占用的内存大小
	sizeof(${0})
snippet tpi     获取数据类型
	typeid(${0})
snippet as      断言
	assert(${0});
snippet sa      编译阶段断言
	static_assert(${0});
# 其他
snippet ?       三元运算符
	${1} ? ${2} : ${0};
snippet i       输入流
	cin >> ${0}
snippet o       输出流
	cout << ${0}
snippet e       错误流
	error ${0}
snippet l       行结束符
	endl;${0}
snippet <       { ... }
	{ ${0} }
snippet .       <>
	<${1}>${0}
